package com.fdl.dao.base.impl;   
  
import java.util.ArrayList;
import java.util.List;
/**
 * 分页对象. 包含数据及分页信息. 
 * @project: hb-intra
 * @Date:2010-7-29
 * @version  1.0
 * @Company: 33e9
 * @author zhangYong.huang
 */
public class Page<T> implements java.io.Serializable {   
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**  
     * 当前页第一条数据的位置,从0开始  
     */  
    private int start;   
  
    /**  
     * 每页的记录数  
     */  
    private int pageSize = BaseHibernateDao.DEFAULT_PAGE_SIZE;   
  
    /**  
     * 当前页中存放的记录  
     */  
    private List<T> data;   
  
    /**  
     * 总记录数  
     */  
    private int totalCount;   
  
    private int size;   
  
    /**  
     * 构造方法，只构造空页  
     */  
    public Page() {   
        this(0, 0, BaseHibernateDao.DEFAULT_PAGE_SIZE, new ArrayList<T>());   
    }   
  
    /**  
     * 默认构造方法  
     *   
     * @param start  
     *            本页数据在数据库中的起始位置  
     * @param totalSize  
     *            数据库中总记录条数  
     * @param pageSize  
     *            本页容量  
     * @param data  
     *            本页包含的数据  
     */  
    public Page(int start, int totalSize, int pageSize, List<T> data) {   
        this.pageSize = pageSize;   
        this.start = start;   
        this.totalCount = totalSize;   
        this.data = data;   
       /* if (data instanceof Collection)   
            this.size = ((Collection) data).size();   
        else if (data instanceof Map)   
            this.size = ((Map) data).size();   
        else  
            this.size = ((Object[]) data).length;   */
        this.size=data.size();
    }   
  
    /**  
     * 取数据库中包含的总记录数  
     */  
    public int getTotalSize() {   
        return this.totalCount;   
    }   
  
    /**  
     * 取总页数  
     */  
    public int getTotalPageCount() {   
        if (totalCount % pageSize == 0)   
            return totalCount / pageSize;   
        else  
            return totalCount / pageSize + 1;   
    }   
  
    /**  
     * 取每页数据容量  
     */  
    public int getPageSize() {   
        return pageSize;   
    }   
  
    /**  
     * 当前页中的记录  
     */  
    public List<T> getResult() {   
        return data;   
    }   

	public void setResult(List<T> data) {
		this.data = data;
	}

	/**  
     * 取当前页码,页码从1开始  
     */  
    public int getCurrentPageNo() {   
        return (start / pageSize) + 1;   
    }   
  
    /**  
     * 是否有下一页  
     * 有返回true
     * 无返回false 
     */  
    public static boolean hasNextPage(int currentPageNo,int totalPageCount) {
    	if(totalPageCount == 0){
    		totalPageCount = 1;
    	}
        return (currentPageNo <= totalPageCount);   
    }   
  
    /**  
     * 是否有上一页  
     * 有返回true
     * 无返回false
     */  
    public static boolean hasPreviousPage(int currentPageNo) {   
        return (currentPageNo >= 1);   
    }   
  
    /**  
     * 获取任一页第一条数据的位置，每页条数使用默认值  
     */  
    protected static int getStartOfPage(int pageNo) {   
        return getStartOfPage(pageNo, BaseHibernateDao.DEFAULT_PAGE_SIZE);   
    }   
  
    /**  
     * 获取任一页第一条数据的位置,startIndex从0开始  
     */  
    public static int getStartOfPage(int pageNo, int pageSize) {  
        return (pageNo - 1) * pageSize;   
    }   
  
    public int getSize() {   
        return this.size;   
    }   
  
}  
